def getStr(i, k):
ans = ''
while i < n:
if s[i] == '1' or s[k] == '1': ans += '1'
else: ans += '0'
i += 1
k += 1
return ans
n = int(input())
s = input()
i = 0
while i < n and s[i] == '0': i += 1
if i == n:
print(0)
exit()
j = i
while i < n and s[i] == '1': i += 1
ans = '0'*(n-i-j)
for k in range(i, j-1, -1):
t = getStr(i, k)
ans = max(ans, t)
print(s[j:i] + ans)
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
string s;
cin >> n >> s;
int flag = 0;
for (int i = 0; i < n; i ++ ) {
if (s[i] == '1') {
flag = 1;
s = s.substr(i);
break;
}
}
if (!flag) {
cout << "0\n";
return 0;
}
int idx = -1;
for (int i = 0; i < s.size(); i ++ ) {
if (s[i] == '0') {
idx = i;
break;
}
}
if (idx == -1) {
cout << s << endl;
return 0;
}
string res = s;
for (int i = idx - 1; i >= 0; i -- ) {
string sa = s.substr(i), sb = s.substr(idx);
string tmp = s;
for (int j = 0; j < sb.size(); j ++ ) {
tmp[idx + j] = max(sa[j], sb[j]);
}
res = max(res, tmp);
}
cout << res << endl;
return 0;
}
1108B - Divisors of Two Integers | 1175A - From Hero to Zero |
1141A - Game 23 | 1401B - Ternary Sequence |
598A - Tricky Sum | 519A - A and B and Chess |
725B - Food on the Plane | 154B - Colliders |
127B - Canvas Frames | 107B - Basketball Team |
245A - System Administrator | 698A - Vacations |
1216B - Shooting | 368B - Sereja and Suffixes |
1665C - Tree Infection | 1665D - GCD Guess |
29A - Spit Problem | 1097B - Petr and a Combination Lock |
92A - Chips | 1665B - Array Cloning Technique |
1665A - GCD vs LCM | 118D - Caesar's Legions |
1598A - Computer Game | 1605A - AM Deviation |
1461A - String Generation | 1585B - Array Eversion |
1661C - Water the Trees | 1459A - Red-Blue Shuffle |
1661B - Getting Zero | 1661A - Array Balancing |